home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / decprom / ds3100.md / RCS / devDecProm.c,v < prev    next >
Text File  |  1990-02-16  |  3KB  |  162 lines

  1. head     1.1;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.1
  10. date     90.02.16.16.14.07;  author shirriff;  state Exp;
  11. branches ;
  12. next     ;
  13.  
  14.  
  15. desc
  16. @@
  17.  
  18.  
  19.  
  20. 1.1
  21. log
  22. @Initial revision
  23. @
  24. text
  25. @/* 
  26.  * devDecProm.c --
  27.  *
  28.  *    Routines that access the Dec PROM device drivers.  This code is
  29.  *    based on DecOS bootstrap code in boot/os/devio.c
  30.  *
  31.  * Copyright 1989 Regents of the University of California
  32.  * Permission to use, copy, modify, and distribute this
  33.  * software and its documentation for any purpose and without
  34.  * fee is hereby granted, provided that the above copyright
  35.  * notice appear in all copies.  The University of California
  36.  * makes no representations about the suitability of this
  37.  * software for any purpose.  It is provided "as is" without
  38.  * express or implied warranty.
  39.  */
  40.  
  41. #ifdef notdef
  42. static char rcsid[] = "$Header: /sprite/src/boot/dsprom/RCS/devDecProm.c,v 1.1 90/02/13 23:40:31 shirriff Exp $ SPRITE (Berkeley)";
  43. #endif /* not lint */
  44.  
  45. #define BOOT_DEV "rz()"
  46.  
  47. #include "sprite.h"
  48. #include "user/fs.h"
  49. #include "kernel/dev.h"
  50. #include "kernel/devFsOpTable.h"
  51. #include "boot.h"
  52. #define _MONFUNCS
  53. #include "kernel/machMon.h"
  54.  
  55. #define DEV_BSIZE 8192
  56.  
  57. #define READ 0
  58. #define WRITE 1
  59.  
  60.  
  61. /*
  62.  *----------------------------------------------------------------------
  63.  *
  64.  * DecPromDevOpen --
  65.  *
  66.  *    Open the device used for booting.  This depends on the initialization
  67.  *    of the devicePtr->data field done in Dev_Config.
  68.  *
  69.  * Results:
  70.  *    SUCCESS or FAILURE.
  71.  *
  72.  * Side effects:
  73.  *    None.
  74.  *
  75.  *----------------------------------------------------------------------
  76.  */
  77. ReturnStatus
  78. DecPromDevOpen(devicePtr)
  79.     Fs_Device    *devicePtr;    /* Sprite device description */
  80. {
  81.     int fd;
  82.  
  83.     fd = Mach_MonOpen(BOOT_DEV,READ);
  84.     if (fd>0) {
  85.     devicePtr->unit = fd;
  86.     return SUCCESS;
  87.     } else {
  88. #ifndef NO_PRINTF
  89.     Mach_MonPrintf("Open failure\n");
  90. #endif
  91.     return FAILURE;
  92.     }
  93. }
  94.  
  95.  
  96. /*
  97.  *----------------------------------------------------------------------
  98.  *
  99.  * DecPromDevRead --
  100.  *
  101.  *    Read from the boot device used for booting.
  102.  *
  103.  * Results:
  104.  *    SUCCESS or FAILURE.
  105.  *
  106.  * Side effects:
  107.  *    The read operation.
  108.  *
  109.  *----------------------------------------------------------------------
  110.  */
  111. ReturnStatus
  112. DecPromDevRead(devicePtr, offset, len, buffer, numBytesPtr)
  113.     Fs_Device    *devicePtr;    /* Sprite device description */
  114.     int offset;            /* Byte offset */
  115.     int len;            /* Byte count;
  116.     char *buffer;        /* Address to read into */
  117.     int *numBytesPtr;        /* Return, the amount actually read */
  118. {
  119.     register int fd = devicePtr->unit;
  120.     register int numBytes;
  121.     register int totalBytes;
  122.     register int toRead;
  123.     int status;
  124.  
  125.     status = Mach_MonLseek(fd, offset, 0);
  126.     if (status<0) {
  127. #ifndef NO_PRINTF
  128.     Mach_MonPrintf("Lseek failure\n");
  129. #endif
  130.     return FAILURE;
  131.     }
  132.  
  133.     /*
  134.      * Break the I/O in to chunks that are edible by the device.
  135.      */
  136.     totalBytes = 0;
  137.     while (len > 0) {
  138.     if (len > DEV_BSIZE) {
  139.         toRead = DEV_BSIZE;
  140.     } else {
  141.         toRead = len;
  142.     }
  143.     numBytes = Mach_MonRead(fd, buffer, toRead);
  144.     if (numBytes <= 0) {
  145.         break;
  146.     }
  147.     buffer += numBytes;
  148.     len -= numBytes;
  149.     totalBytes += numBytes;
  150.     }
  151.     *numBytesPtr = totalBytes;
  152.     if (numBytes <= 0) {
  153. #ifndef NO_PRINTF
  154.     Mach_MonPrintf("Read failure: read(%d, %x, %x)\n",fd,buffer,toRead);
  155. #endif
  156.     return(FAILURE);
  157.     } else {
  158.     return(SUCCESS);
  159.     }
  160. }
  161. @
  162.